home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 9 / Night Owl CD-ROM (NOPV9) (Night Owl Publisher) (1993).ISO / 005a / pbank21b.zip / BANK.PPS < prev    next >
Text File  |  1993-06-15  |  13KB  |  264 lines

  1. ;*****************************************************************************
  2. ;*                                                                           *
  3. ;*                           THE TIME BANK V2.1b                             *
  4. ;*                                                                           *
  5. ;*                 using PCBoard Programming Language [PPL]                  *
  6. ;*                                                                           *
  7. ;*                    Written by: Eyal Levi/Peter Veeck                      *
  8. ;*                                                                           *
  9. ;*                      posted on Saltair: 06-16-93                          *
  10. ;*                                                                           *
  11. ;*                                                                           *
  12. ;*                Modification History:  See History.doc file                *
  13. ;*                                                                           *
  14. ;*****************************************************************************
  15. ;
  16. ; Cmd line:  bank withdraw nnn        ba w nnn  -- Save time
  17. ;            bank deposit nnn         ba d nnn  -- Restore time
  18. ;            bank show                ba s      -- Show bank time
  19. ;            bank                     ba        -- Interactive
  20. ;
  21. :DEFINE_VARIABLES
  22.   INTEGER max_bank,max_withdraw,max_deposit,wtime_avail,dtime_avail
  23.   INTEGER chgtime,found,opts,keep_time,err_num,note_line,dlen,wlen
  24.   STRING bank_command,count,error,cmdline
  25.   STRING usertoken(10),cmdtoken(4)
  26.   BOOLEAN Iactive,error_log
  27. :SET_PARAMETERS
  28.   Error_log        = TRUE ; *change to FALSE for no error logging to caller log
  29.   note_line        = 4    ; *Line to use for storage in NOTES PSA
  30.                           ;
  31. ;  IF (U_SEC<255) DO      ; can set allowable time parameters
  32.     MAX_bank       = 60   ;   by security here by defining new
  33.     MAX_WITHDRAW   = 45   ;   security levels and times.
  34.     MAX_deposit    = 30   ; *max_bank is the maximum time that can be banked
  35.     keep_time      =  5   ; *max_withdraw is the maximum time that can be
  36. ;  ELSEIF (U_SEC=255) DO  ;   withdrawn with one running of the PPE
  37. ;    MAX_bank      = 300  ; *max_deposit is the maximum time that can be
  38. ;    MAX_WITHDRAW  = 150  ;   deposited with one running of the PPE
  39. ;    Keep_time     =   5  ; *keep_time is the minimum time left on the
  40. ;  ENDIF                  ;   system for logoff and relogon
  41.                           ; * indicates over ridden by envirnment variable
  42.                           :   if used
  43. :START
  44.   cmdline = TOKENSTR()               ; store commandline
  45.   Iactive = FALSE
  46.   TOKENIZE cmdline
  47.   IF (TOKCOUNT() > 2) DO
  48.     PRINTLN "@X0EToo many command line arguments.  Reenter.@X07"
  49.     PRINTLN "@X0EBANK @X07or @X0EBANK SHOW @X07or @X0EBANK WITHDRAW nn @X07or @X0EBANK DEPOSIT nn@X07"
  50.     GOTO EXIT
  51.   ENDIF
  52.   count = 1                        ; Used while loops rather than
  53.   GETTOKEN cmdtoken(count)         ; for loops as the while created 20 bytes
  54.   WHILE (cmdtoken(count) != "") DO ; less code
  55.     count = count + 1              ;
  56.     GETTOKEN cmdtoken(count)       ;
  57.   ENDWHILE
  58.   IF (GETENV("PBANK")) DO          ; Check for environment variable
  59.      TOKENIZE GETENV("PBANK")      ;
  60.      GETTOKEN max_bank             ; Need a set statement in DOS prior to
  61.      GETTOKEN max_withdraw         ; loading PCBoard. Should read:
  62.      GETTOKEN max_deposit          ;
  63.      GETTOKEN keep_time            ; SET PBANK=nn nn nn nn n n
  64.      GETTOKEN note_line            ;
  65.      GETTOKEN error_log            ; where where the settings are in order
  66.   ENDIF                            ; of the variables listed here.
  67.   IF (!(PSA(6))) DO                                  ;
  68.     PRINTLN "@X0CNotes PSA must be installed in PCBSM@X07."  ; Check if Notes
  69.     PRINTLN "@X0CPlease Notify SYSOP.@X07"                   ; PSA is installed
  70.     goto EXIT
  71.   ENDIF
  72.   dlen = LEN(max_deposit)
  73.   wlen = LEN(max_withdraw)
  74.   GETUSER
  75.   IF ((U_NOTES(note_line)) = ("")) DO
  76.     opts = 0
  77.     GOTO NEWBANK
  78.   ELSE
  79.     found = 0
  80.     TOKENIZE U_NOTES(note_line)         ; Split up NOTES line
  81.     opts = TOKCOUNT()
  82.     IF (opts > 10) DO                   ; too many tokens for array?
  83.       PRINTLN "@X0CInsufficient Bank storage space.  Notify Sysop.@X07"
  84.       GOTO EXIT
  85.     ENDIF
  86.     FOR count = 1 TO opts               ; Get bank info from notes line
  87.       GETTOKEN usertoken(count)         ;
  88.       if (usertoken(count) == "BANK") found = count
  89.     ENDFOR
  90.     if (found > 0) goto BANK
  91.   ENDIF
  92. :NEWBANK
  93.   IF (opts > 7) DO                      ; too many tokens for array?
  94.     PRINTLN "@X0CInsufficient Bank storage space.  Notify Sysop.@X07"
  95.     GOTO EXIT
  96.   ENDIF
  97.   IF (!(INSTR(U_NOTES(note_line),"               "))) DO  ; room to store bank?
  98.     PRINTLN "@X0CInsufficient String storage space.  Notify Sysop.@X07"
  99.     GOTO EXIT
  100.   ENDIF
  101.   found = opts + 1
  102.   opts = opts + 3
  103.   usertoken(found) = "BANK"             ;
  104.   usertoken(found+1) = "TIME"           ;
  105.   usertoken(found+2) = 0
  106. :BANK                                   ;BEGIN_MAIN
  107.   IF (LEFT(cmdtoken(1),1) = "S") DO     ; Look for "S"how bank time
  108.     PRINTLN  "@POS:10@@X0B",usertoken(found)," ",usertoken(found+1),":  @X0E",usertoken(found+2)," @X07min."
  109.     GOTO EXIT
  110.   ELSEIF (LEFT(cmdtoken(1),1) = "D") GOTO DEPOSIT   ; Look for "D"eposit
  111.   ELSEIF (LEFT(cmdtoken(1),1) = "W") GOTO WITHDRAW  ; look for "W"ithdraw
  112.   ENDIF
  113. :INTERACTIVE
  114.   if (GRAFMODE{} = "N") DO              ; for CTTY mode
  115.     PRINTLN "You are unable to use the Time Bank interractively in your current node."
  116.     PRINTLN "Either change your mode to GRAPHICS or ANSI or enter from the command line."
  117.     PRINTLN "Syntex is:   BANK SHOW        to display time in bank."
  118.     PRINTLN "             BANK DEPOSIT nn  to deposit time in bank."
  119.     PRINTLN "             BANK WITHDRAW nn to withdraw time from bank."
  120.     GOTO EXIT
  121.   ENDIF
  122.   iactive = TRUE
  123. :SCREEN_DRAW                    ; you can edit this screen with PCBedit
  124.   PRINTLN "@CLS@@X07"
  125.   PRINTLN "@X07"
  126.   PRINTLN "@X07"
  127.   PRINTLN "@X07  @X77                @X7F┌────────────────────────────────────────────@X7F┐@POS:79@@X07"
  128.   PRINTLN "@X0F @X08█@X78                @X70│   @X7A@BOARDNAME@ Time Bank @POS:64@@X7F│@POS:79@@X07"
  129.   PRINTLN "@X0F @X08█@X78                @X70└────────────────────────────────────────────@X7F┘@POS:79@@X07"
  130.   PRINTLN "@X0F @X08█@X78     @X7F┌─────────────────────┐   ┌─────────────────────────────────────@X7F┐   @X07"
  131.   PRINTLN "@X0F @X08█@X78     @X70│  @X7BD@X78)@X71eposit time      @X7F│   @X70│ @X7BIn your Account@X78: @X7E    @X78               @X7F│   @X07"
  132.   PRINTLN "@X0F @X08█@X78     @X70│  @X7BW@X78)@X71ithdraw time     @X7F│   @X7F@X70│ @X79Maximum Bank Balance@X78: @X7E    @X78          @X7F│   @X07"
  133.   PRINTLN "@X0F @X08█@X78     @X70│  @X7BH@X78)@X71elp!             @X7F│   @X70│                                     @X7F│   @X07"
  134.   PRINTLN "@X0F @X08█@X78     @X70│                     @X7F│   @X70│ @X7EAvailable for Withdrawal@X78: @X7E    @X78      @X7F│   @X07"
  135.   PRINTLN "@X0F @X08█@X78     @X70│  @X7BQ@X78)@X74uit to @X74BBS       @X7F│   @X70│ @X7EAvailable for Deposit   @X78: @X7E    @X78      @X7F│   @X07"
  136.   PRINTLN "@X0F @X08█@X78     @X70│  @X7BG@X78)@X74oodbye           @X7F│   @X70│ @X79Maximum Withdrawal P/Day@X78: @X7E    @X78      @X7F│   @X07"
  137.   PRINTLN "@X0F @X08█@X78     @X70└─────────────────────@X7F┘   @X70└─────────────────────────────────────@X7F┘   @X07"
  138.   PRINTLN "@X0F @X08█@X78                                                                         @X07"
  139.   PRINTLN "@X08 █@X78                                                                         @X07"
  140.   PRINTLN "@X08 █@X78                                                                         @X07"
  141.   PRINTLN "@X08 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀@X07"
  142. :ENTRIES
  143.   Dtime_avail = Max_deposit
  144.   Wtime_avail = usertoken(found+2)
  145. :REENTRY
  146.   Bank_Command=""
  147.   IF (Wtime_avail > MAX_WITHDRAW) Wtime_avail = MAX_WITHDRAW
  148.   IF (Dtime_avail > MAX_bank - usertoken(found+2)) Dtime_avail = Max_bank - usertoken(found+2)
  149.   IF (Dtime_avail > MINLEFT() - keep_time) Dtime_avail = MINLEFT() - keep_time
  150.   IF (dtime_avail < 0) dtime_avail = 0
  151.   ANSIPOS 53,8                                       ;
  152.   PRINT "@X75",usertoken(found+2)," @X78Min   @X07"  ; Position the cursor and
  153.   ANSIPOS 58,9                                       ; put in the numbers
  154.   PRINT "@X75",MAX_bank," @X78Min.   @X07"           ;
  155.   ANSIPOS 62,11                                      ;
  156.   PRINT "@X75",wtime_AVAIL," @X78Min.   @X07"        ;
  157.   ANSIPOS 62,12                                      ;
  158.   PRINT "@X75",dtime_AVAIL," @X78Min.   @X07"        ;
  159.   ANSIPOS 62,13                                      ;
  160.   PRINT "@X75",MAX_WITHDRAW," @X78Min.   @X07"       ;
  161.   ANSIPOS 0,19
  162.   INPUTSTR "(@X0C@TIMELEFT@ @X0Emin. left) Command",Bank_Command,0Eh,1,MASK_ALNUM(),FIELDLEN+GUIDE+UPCASE+LFBEFORE+LFAFTER+ERASELINE
  163.   IF (Bank_Command = "D") GOTO DEPOSIT               ;
  164.   IF (Bank_Command = "W") GOTO WITHDRAW              ; what to do
  165.   IF (Bank_Command = "H") DO                         ;
  166.     IF (EXIST(HELPPATH() + "BANK")) DISPFILE HELPPATH() + "BANK",LANG+SEC+GRAPH
  167.     GOTO INTERACTIVE
  168.   ENDIF
  169.   IF (Bank_Command = "Q") GOTO EXIT                  ; get out
  170.   IF (Bank_Command = "G") GOTO BYE                   ;
  171.   IF (Bank_Command = "") GOTO EXIT                   ;
  172.   GOTO ENTRIES
  173. :DEPOSIT
  174.   IF (iactive = TRUE) DO
  175.     chgtime = dtime_avail
  176.     CLREOL
  177.     INPUTSTR "Enter the Amount to Deposit: ",chgtime,0Eh,dlen,MASK_NUM(),FIELDLEN+GUIDE+UPCASE+ERASELINE
  178.   ELSE
  179.     chgtime = cmdtoken(2)
  180.     IF (chgtime < 0) chgtime = 0
  181.   ENDIF
  182.   IF (chgtime + usertoken(found+2) > max_bank) DO
  183.     err_num = 1
  184.   ELSEIF (chgtime > max_deposit) THEN err_num = 2
  185.   ELSEIF (chgtime > (MINLEFT() - keep_time)) THEN err_num = 3
  186.   ELSE
  187.     usertoken(found+2) = usertoken(found+2) + chgtime
  188.     U_NOTES(note_line) = usertoken(1)              ; Put U_NOTES back
  189.     FOR count = 2 TO (opts)                        ;   together
  190.       U_NOTES(note_line) = U_NOTES(note_line)+" "+usertoken(count)  ;
  191.     ENDFOR
  192.     PUTUSER                            ; update bank
  193.     ADJTIME -chgtime                   ; update board time
  194.     dtime_avail = dtime_avail - chgtime
  195.     if (dtime_avail < 0) DO
  196.       dtime_avail = 0
  197.     ENDIF
  198.     err_num = 0
  199.   ENDIF
  200. :DERROR                      ; Deposit error displays -- roll your own
  201.   IF (err_num = 0) DO
  202.     PRINTLN "@X0CDepositing @X0E",chgtime,"@X0E Min@X0C to Your Account         @X07"
  203.     LOG "Time Bank Deposit: " + STRING(chgtime) + " Min.",0
  204.   ELSEIF (err_num = 1) DO
  205.     PRINTLN "@X0CThe maximum allowed bank time is @X0B",max_bank," min.             @X07@BEEP@"
  206.     IF (error_log = TRUE) Log "Attempted to Deposit More than Maximum Bank Time",0
  207.   ELSEIF (err_num = 2) DO
  208.     PRINTLN "@X0CThe Maximum daily Deposit is: @X0B",max_deposit," Min.         @X07@BEEP@"
  209.     IF (error_log = TRUE) Log "Attempted to Exceed Max daily Deposit",0
  210.   ELSEIF (err_num = 3) DO
  211.     PRINTLN "@X0CYou must maintain @X0B",keep_time," Min. for logoff.           @X07@BEEP@"
  212.     IF (error_log = TRUE) Log "Attempted to store logoff allotment",0
  213.   ENDIF
  214.   if (iactive = TRUE) GOTO REENTRY
  215.   goto exit
  216. :WITHDRAW
  217.   IF (iactive = TRUE) DO
  218.     CLREOL
  219.     INPUTSTR "Enter the Amount to Withdraw:",chgtime,0Eh,wlen,MASK_NUM(),FIELDLEN+GUIDE+UPCASE+ERASELINE
  220.   ELSE
  221.     chgtime = cmdtoken(2)
  222.     IF (chgtime < 0) chgtime = 0
  223.   ENDIF
  224.   IF (usertoken(found+2) = 0) DO
  225.     err_num = 1
  226.   ELSEIF (chgtime > usertoken(found+2)) DO
  227.     err_num = 2
  228.   ELSEIF (chgtime > max_withdraw) DO
  229.     err_num = 3
  230.   ELSE
  231.     usertoken(found+2) = usertoken(found+2) - chgtime
  232.     U_NOTES(note_line) = usertoken(1)
  233.       FOR count = 2 TO (opts)
  234.         U_NOTES(note_line) = U_NOTES(note_line)+ " " + usertoken(count)
  235.       ENDFOR
  236.     IF (chgtime < 0) chgtime = 0
  237.     PUTUSER                             ; update bank
  238.     ADJTIME chgtime                     ; update board time
  239.     wtime_avail = wtime_avail - chgtime
  240.     if (wtime_avail < 0) do
  241.       wtime_avail = 0
  242.     ENDIF
  243.     err_num = 0
  244.   ENDIF
  245. :WERROR                      ; Withdrawal error displays -- roll your own
  246.   IF (err_num = 0) DO
  247.     PRINTLN "@X0CWithdrawing @X0E ",chgtime," Min@X0C from Your Account         @X07"
  248.     LOG "Time Bank Withdrawal: " + STRING(chgtime) + " Min.",0
  249.   ELSEIF (err_num = 1) DO
  250.     PRINTLN "@X0CYou Must deposit time in the Bank in order to Withdraw         @X07@BEEP@"
  251.     IF (error_log = TRUE) Log "Attempted to Withdraw : No Time in the Bank!",0
  252.   ELSEIF (err_num = 2) DO
  253.     PRINTLN "@X0CYou cannot withdraw more than you have.                        @X07@BEEP@"
  254.     IF (error_log = TRUE) LOG "Attempted to withdraw more than in bank.",0
  255.   ELSEIF (err_num = 3) DO
  256.     PRINTLN "@X0CMaximum daily withdrawal is @X0B",max_withdraw," min.              @X07@BEEP@"
  257.     IF (error_log = TRUE) LOG "Attempted to excede max daily withdrawal.",0
  258.   ENDIF
  259.     if (iactive = TRUE) GOTO REENTRY
  260. :EXIT
  261.   END
  262. :BYE
  263.   GOODBYE
  264.